iT邦幫忙

2022 iThome 鐵人賽

DAY 9
2
Modern Web

Laravel 9 漫遊,享受魔法般的極速網頁開發體驗系列 第 9

Day 09:新的資料庫遷移作法:Squashing Migrations

  • 分享至 

  • xImage
  •  

隨著服務的成長,我們總是會開始需要使用資料庫的。

跟之前一樣,我們用一個簡單的資料表 quotes,來儲存我們的名言:

資料表欄位名稱 資料欄位內容
id 資料 id
content 名言內容
created_at 資料建立時間
updated_at 資料編輯時間

調整資料庫版本

在之前的文章 [Day 9] 建立資料庫!Laravel 怎麼做資料庫遷移 裡面,由於當時的資料庫版本設置太新,我們建立專案時必須手動調整資料庫的版本。

在今天!我們已經不需要手動調整資料庫的版本了!

Laravel Sail 定義的資料庫版本,位於專案的 docker-compose.yml 檔案內

mysql:  
    image: 'mysql/mysql-server:8.0'

使用資料庫

進到 .env 檔,我們會發現 Laravel 已經幫我們把連線設置成 Laravel Sail 可以使用的環境了

DB_CONNECTION=mysql  
DB_HOST=mysql  
DB_PORT=3306  
DB_DATABASE=ithome_2022_example_app  
DB_USERNAME=sail  
DB_PASSWORD=password

我們只需要用 sail 幫我們做 migrate 就好

./vendor/bin/sail artisan migrate

   INFO  Preparing database.  

  Creating migration table ............................................ 130ms DONE

   INFO  Running migrations.  

  2014_10_12_000000_create_users_table ................................. 82ms DONE
  2014_10_12_100000_create_password_resets_table ....................... 55ms DONE
  2019_08_19_000000_create_failed_jobs_table ........................... 56ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ................ 70ms DONE

如果想看到內容的話,直接透過 MySQL 連線工具,如筆者所使用的 Sequel Ace,連線 127.0.0.1 即可看到 ithome_2022_example_app 這個資料庫。

撰寫 migration 的方法跟之前沒有太大差別,參考之前的文章就好。

Squashing Migrations

從 Laravel 8 開始,支援另一種建立資料庫的方式:透過
mysql-schema.dump,如果你在撰寫專案之前,已經有一個使用中的資料庫,像這樣一個檔案整理完所有資料庫架構的方式非常方便!

要從現有連線產生 mysql-schema.dump 非常簡單。只需要透過 schema:dump 這個指令即可

./vendor/bin/sail artisan schema:dump

mysqldump: [Warning] Using a password on the command line interface can be insecure.

   INFO  Database schema dumped successfully.

建立好之後,即使你沒有一張一張表建立對應的 migration,artisan 也會去找 mysql-schema.dump 這個檔案去建立對應的資料庫架構

./vendor/bin/sail artisan migrate

   INFO  Preparing database.  

  Creating migration table ............................................ 122ms DONE

   INFO  Loading stored database schemas.  

  database/schema/mysql-schema.dump ................................... 230ms DONE

   INFO  Nothing to migrate.  

比起過去的建立方式,可以說方便太多了!

今天有關資料庫遷移的方式,我們就分享到這邊,各位明天見!

參考資料


上一篇
Day 08:新世界的單元測試,另外加上覆蓋率分析!
下一篇
Day 10:Laravel 9 資料庫操作與 seeder 的 WithoutModelEvents
系列文
Laravel 9 漫遊,享受魔法般的極速網頁開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言